`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: University Of Utah
// Engineer: David Hurst , Tyson Hunt, Chase Hochstrasser
// 
// Create Date:    16:02:38 08/30/2011 
// Design Name: 	
// Module Name:    opcode 
// Project Name: 		ALU
// Target Devices: 
// Tool versions: 
// Description: 	Opcodes and flags assignments to bits
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//////////////////////////////////////////////////////////////////////////////////

//Opcodes
// ADD
parameter ADD = 8'b00000101;
parameter ADDI = 8'b01010000;
parameter ADDU = 8'b00000110;
parameter ADDUI = 8'b01100000;
parameter ADDC = 8'b00000111;
parameter ADDCI = 8'b01110000;

// SUB
parameter SUB = 8'b00001001;
parameter SUBI = 8'b10010000;
parameter SUBCI = 8'b10100000;

// COMPARE
parameter CMP = 8'b00001011;
parameter CMPI = 8'b10110000;

// OR
parameter OR = 8'b00000010;
parameter ORI = 8'b00100000;

// AND
parameter AND = 8'b00000001;
parameter ANDI = 8'b00010000;

// XOR
parameter XOR = 8'b00000011;
parameter XORI = 8'b00110000;

// MOVE
parameter MOV = 8'b00001101;
parameter MOVI = 8'b11010000;

// SHIFT
parameter LSH = 8'b10000100;
parameter LSHI = 8'b10000000;

// Arithmitic Shift
parameter ASHU = 8'b10000110;
parameter ASHUI = 8'b10000010;

// Load and Store
parameter LOAD = 8'b01000000;
parameter STOR = 8'b01000100;

// Jump
parameter Jcond = 8'h4c;
parameter JAL = 8'h48;


// No op
parameter NOP = 0;

// FLAGS  zero bit, low bit, carry
parameter zero = 3'b100; //4
parameter low = 3'b000; //0
parameter carry = 3'b011; //3


//Pipeline states
parameter boot = 0;
parameter fetch = 1;
parameter execute=3;
parameter mem = 4;
parameter wb = 5; 


//FSM states
parameter decode = 2;
//Execute
parameter jumpexecute= 3;
parameter rtypeexecute = 4;
parameter immediateexecute =5;
parameter storexecute=6;
parameter loadexecute=7;
//Stor
parameter loadstate = 8;
parameter storstate = 9;
parameter immediatestate = 10;
parameter rtypestore = 11;
parameter Jcondstate = 12;
parameter nojump=13;
parameter cmpstore=14;
parameter write_back = 15;